<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>

</body>

</html>
<script>
    // 发布订阅模式，又称为观察者模式，有发布者和订阅者，发布者为一个，但是订阅者可以是多个
    (function () {
        function obs() {
            this.obj = {}
            // 订阅消息
            // 参数1,消息类型，是string类型
            // 参数2，主要是接收消息，为函数类型
            this.on = function (type, handler) {
                // 保存该消息类型及接收消息的函数
                this.obj[type] = this.obj[type] || []
                this.obj[type].push(handler)
            }
            // 发布消息
            this.show = function (type, mas) {
                // 拿到type对应的类型消息的所有订阅者的回调函数，调用该函数
                // 再次先进行判断，如果订阅者为0，所以取不到我想要的值，要先进行判断
                this.obj[type].forEach((item) => {
                    item(mas)
                })
            }
        }
        window.obs = obs
    })()
    // 实例化对象
    var bs = new obs()
    // 订阅消息
    bs.on('lijiaqi', function (mas) {
        console.log('丽丽收到了来自lijaiqi的消息:' + mas);
    })
    console.log(bs);
</script>